<template>
  <div class="login-page">
    <div class="overlay">
      <div class="login-box">
        <h2 class="login-box h2">登录</h2>
        <div class="login-content">
          <!-- 左侧：第三方登录 -->
          <div class="third-party">
            <el-button type="primary" class="third-party-btn">QQ登录</el-button>
            <el-button type="success" class="third-party-btn">微信登录</el-button>
            <el-button type="info" class="third-party-btn">支付宝登录</el-button>
          </div>

          <!-- 右侧：账号密码登录 -->
          <div class="account-form">
            <el-input v-model="loginName" placeholder="用户名" />
            <el-input v-model="loginPassword" placeholder="密码" type="password" />
            <el-button @click="submitLogin" type="success" class="login-btn">登录</el-button>
            <p v-if="error" class="error">{{ error }}</p>
          </div>
        </div>

        <div class="login-footer">
          <span class="span_left" @click="goToRegist">注册用户</span>
          <span class="span_right" @click="goToChange">修改密码</span>
        </div>
      </div>
    </div>
  </div>
</template>

<script>
import { mapGetters, mapActions } from 'vuex';
import axios from '@/utils/axios';


export default {
  data() {
    return {
      error: '' // 存储错误信息
    };
  },
  computed: {
    ...mapGetters(['getLoginName', 'getLoginPassword']),
    loginName: {
      get() {
        return this.getLoginName;
      },
      set(value) {
        this.updateLoginName(value);
      }
    },
    loginPassword: {
      get() {
        return this.getLoginPassword;
      },
      set(value) {
        this.updateLoginPassword(value);
      }
    }
  },
  methods: {
    ...mapActions(['updateLoginName', 'updateLoginPassword']),
    async submitLogin() {
  if (!this.loginName || !this.loginPassword) {
    this.error = '请输入用户名和密码';
    return;
  }
  try {
    const response = await axios.post('/users/login', {
      username: this.loginName,
      password: this.loginPassword
    });

    const user = response.data;

    if (user && user.username) {
      // 登录成功，保存用户信息（比如保存到 Vuex 或 localStorage）
      this.$store.commit('setUser', user); // 假设你有这个 mutation
      localStorage.setItem('user', JSON.stringify(response.data));
      this.$router.push('/homepage/shouye');
      this.loginName = '';
      this.loginPassword = '';
    } else {
      this.error = '用户名或密码错误';
      this.loginPassword = '';
    }
  } catch (error) {
    this.error = '登录失败，请稍后重试';
    console.error('Login error:', error);
  }

  setTimeout(() => {
    this.error = '';
  }, 3000);
}
,
    goToRegist() {
      this.$router.push('/regist');
    },
    goToChange() {
      this.$router.push('/change');
    }
  }
};
</script>

<style scoped>
.error { color: red; }
/* ✅ 背景全屏铺满 */
.login-page {
  /* ✅ 固定定位，代表这个元素会被固定在浏览器窗口的某个位置，不会因为页面滚动而滚动。常用于登录页*/
  position: fixed;
  /* ✅ 表示四边上下左右举例浏览器窗口边缘的距离是0*/
  inset: 0;
  /* ✅ 背景图片设置，不重复平铺图片，背景图在容器中水平和垂直都居中显示 */
  background: url('@/assets/bg.png') no-repeat center center;
  /* ✅ 将背景图片等比缩放到铺满整个容器，即使会被裁剪也没关系。不会出现白边 */
  background-size: cover;
  /* ✅ 流式布局， */
  display: flex;
  /* ✅ 水平垂直居中 */
  justify-content: center;
  align-items: center;
}

/* ✅ 登录内容半透明白底、圆角 */
.overlay {
  /* ✅ 背景色 */
  background-color: rgba(255, 255, 255, 0.95);
  /* ✅ 内边距，代表元素与边框之间的距离，与外边距的区别是，内边距不会影响元素大小，外边距会改变元素大小 */
  padding: 30px;
  /* ✅ 圆角 */
  border-radius: 10px;
  /* ✅ 最大宽度，设置为父元素的0.9 */
  width: 90%;
  max-width: 800px;

}

.login-box h2 {
  color: black;
  text-align: center;
  /* ✅ 底部边距，代表元素与边框之间的距离，与内边距的区别是，内边距不会影响元素大小，外边距会改变元素大小 */
  margin-bottom: 20px;
}


.login-content {
  /* ✅ 弹性布局，可以灵活排列 */
  display: flex;
  /* ✅ 间隔，代表元素与相邻元素之间的距离，与内边距的区别是，内边距不会影响元素大小，外边距会改变元素大小 */
  gap: 30px;
  /* ✅ 设置主轴方向为水平，默认就是水平*/
  flex-direction: row;
  /* ✅ 主轴上的对齐方式是两端对齐 */
  justify-content: space-between;
}

.third-party-btn {
  /* ✅ 宽度，代表元素宽度，与外边距的区别是，外边距会改变元素大小 */
  width: 90%;
  /* ✅ 高度，代表元素高度，与外边距的区别是，外边距会改变元素大小 */
  height: 40px;
  /* ✅ 字体大小，代表元素字体大小，与外边距的区别是，外边距会改变元素大小 */
  font-size: 14px;
  /* ✅ 内边距，代表元素与边框之间的距离，与外边距的区别是，内边距不会影响元素大小，外边距会改变元素大小 */
  padding: 0;
}

/* ✅ 两个子元素均分剩余空间 */
.third-party,
.account-form {
  /* ✅ 弹性布局，flex为1表示平均占据可用空间 */
  flex: 1;
  /* ✅ 弹性布局， */
  display: flex;
  /* ✅ 弹性布局，设置为列 */
  flex-direction: column;
  /*元素与元素之间的间隔*/
  gap: 10px;
}

.login-footer {
  /* ✅ 距离上方内容的边距 */
  margin-top: 20px;
  /* ✅ 背景颜色，给人一种分区的感觉 */
  background: #555;
  /* ✅ 设置文字颜色为白色 */
  color: white;
  /* ✅ 弹性布局， */
  display: flex;
  /* ✅ 主轴上的对齐方式是两端对齐 */
  justify-content: space-between;
  /* ✅ 内边距，距离自己的上下左右都留出10px空白，防止内容贴边 */
  padding: 10px;
  /* ✅ 设置字体大小 */
  font-size: 14px;

}

.login-btn {
  width: 100%;
}

.span_left {
  width: 50%;
  display: flex;
  justify-content: center;   /* 水平居中 */
  align-items: center;       /* 垂直居中 */
}

.span_right {
  width: 50%;
  display: flex;
  justify-content: center;   /* 水平居中 */
  align-items: center;       /* 垂直居中 */

}
/* ✅ 响应式布局：小屏一列排布 */
@media (max-width: 800px) {
  .login-content {
    flex-direction: column;
  }

  .login-footer {
    flex-direction: column;
    align-items: center;
    gap: 10px;
  }
}

.span_ui {
  margin-right: 50px;
}
</style>
